//
// Created by 罗玉龙 on 2017/6/18.
//

#include <iostream>

using namespace std;

/*
有public, protected, private三种继承方式，它们相应地改变了基类成员的访问属性。
1.public 继承：基类 public 成员，protected 成员，private 成员的访问属性在派生类中分别变成：public, protected, private
2.protected 继承：基类 public 成员，protected 成员，private 成员的访问属性在派生类中分别变成：protected, protected, private
3.private 继承：基类 public 成员，protected 成员，private 成员的访问属性在派生类中分别变成：private, private, private
但无论哪种继承方式，上面两点都没有改变：
1.private 成员只能被本类成员（类内）和友元访问，不能被派生类访问；
2.protected 成员可以被派生类访问。
 */

class Box
{
public:
    double length;   // 长度
    double breadth;  // 宽度
    double height;   // 高度

    double getVolume();
//在类定义中定义的成员函数把函数声明为内联的，即便没有使用 inline 标识符。
//    double getVolume()// 返回体积
//    {
//        return length * breadth * height;
//    }
};
//成员函数可以定义在类定义内部，或者单独使用范围解析运算符 :: 来定义。
double Box::getVolume(void)
{
    return length * breadth * height;
}

int testClass( )
{
    Box Box1;        // 声明 Box1，类型为 Box
    Box Box2;        // 声明 Box2，类型为 Box
    double volume = 0.0;     // 用于存储体积

    // box 1 详述
    Box1.height = 5.0;
    Box1.length = 6.0;
    Box1.breadth = 7.0;

    // box 2 详述
    Box2.height = 10.0;
    Box2.length = 12.0;
    Box2.breadth = 13.0;

    // box 1 的体积
    volume = Box1.height * Box1.length * Box1.breadth;
    cout << "Box1 的体积：" << volume <<endl;

    // box 2 的体积
    volume = Box2.height * Box2.length * Box2.breadth;
    cout << "Box2 的体积：" << volume <<endl;

    volume = Box2.getVolume();
    return 0;
}